gusucode.com > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM源码程序 > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM\Classification_LS_SVMlab.m

    % 支持向量机用于多类模式分类 - 必须选择最优参数 gam,sig2
% 工具箱:LS_SVMlab
% 使用平台:Matlab6.5
% 作者:陆振波,海军工程大学
% 欢迎同行来信交流与合作,更多文章与程序下载请访问我的个人主页
% 电子邮件:luzhenbo@sina.com
% 个人主页:luzhenbo.88uu.com.cn

clc
clear
close all

%---------------------------------------------------
% 产生训练样本与测试样本,每一列为一个样本

n1 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];
x1 = [1*ones(1,5),2*ones(1,5),3*ones(1,5)];     % 特别注意:这里的目标与神经网络不同

n2 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];
x2 = [1*ones(1,5),2*ones(1,5),3*ones(1,5)];     % 特别注意:这里的目标与神经网络不同

xn_train = n1;          % 训练样本
dn_train = x1;          % 训练目标

xn_test = n2;           % 测试样本
dn_test = x2;           % 测试目标

%---------------------------------------------------
% 参数设置

X = xn_train';
Y = dn_train';
Xt = xn_test';
Yt = dn_test';

type = 'c';
kernel_type = 'RBF_kernel';
gam = 2;
sig2 = 2;

preprocess = 'preprocess';
codefct = 'code_MOC';           

% 将“多类”转换成“两类”的编码方案
% 1. Minimum Output Coding (code_MOC) 
% 2. Error Correcting Output Code (code_ECOC)
% 3. One versus All Coding (code_OneVsAll)
% 4. One Versus One Coding (code_OneVsOne) 

%---------------------------------------------------
% 编码

[Yc,codebook,old_codebook] = code(Y,codefct)

%---------------------------------------------------
% 交叉验证优化参数

%[gam,sig2] = tunelssvm({X,Yc,type,gam,sig2,kernel_type,preprocess})

%---------------------------------------------------
% 训练与测试

[alpha,b] = trainlssvm({X,Yc,type,gam,sig2,kernel_type,preprocess});           % 训练
Yd0 = simlssvm({X,Yc,type,gam,sig2,kernel_type,preprocess},{alpha,b},Xt);      % 分类

%---------------------------------------------------
% 解码

Yd = code(Yd0,old_codebook,[],codebook);

%---------------------------------------------------
% 结果统计

Result = ~abs(Yd-Yt)               % 正确分类显示为1
Percent = sum(Result)/length(Result)   % 正确分类率

%---------------------------------------------------
% 注意:以这两种写法等价

% -- 1 --
% [Yc,codebook,old_codebook] = code(Y, codefct)
% [alpha, b] = trainlssvm({X,Yc,type,gam,sig2,kernel,preprocess})
% Yd0 = simlssvm({X,Yc,type,gam,sig2,kernel}, {alpha,b}, Xt)
% Yd = code(Yd0,old_codebook,[],codebook)

% -- 2 --
% model = initlssvm(X,Y,type,gam,sig2,kernel,preprocess)
% model = changelssvm(model,'codetype',codefct)
% model = trainlssvm(model)
% Yd = simlssvm(model, Xt)